package com.zyl.blog.common.enums;

import com.zyl.blog.common.strategy.*;
import lombok.Getter;

/**
 * 脱敏类型枚举
 * 定义系统支持的脱敏类型，每种类型对应一种默认策略
 * @version v1.0
 * @ProjectName: Personal_Blog_Server
 * @Package: com.zyl.blog.common.enums
 * @ClassName: SensitiveType
 * @Author FinalFantasy
 * @Date 2025/9/8-10:18
 */
@Getter
public enum SensitiveType {
    /**
     * 自定义（需要指定strategy）
     */
    CUSTOM,

    /**
     * 手机号（138****5678）
     */
    PHONE(new PhoneSensitiveStrategy()),

    /**
     * 身份证号（110********1234）
     */
    ID_CARD(new IdCardSensitiveStrategy()),

    /**
     * 邮箱（f***@qq.com）
     */
    EMAIL(new EmailSensitiveStrategy()),

    /**
     * 姓名（张*或张**）
     */
    NAME(new NameSensitiveStrategy()),

    /**
     * 地址（北京市海淀区****）
     */
    ADDRESS(new AddressSensitiveStrategy()),

    /**
     * 银行卡号（6222****1234）
     */
    BANK_CARD(new BankCardSensitiveStrategy()),

    /**
     * 生日（1990-**-**）
     */
    BIRTHDAY(new BirthdaySensitiveStrategy());

    private final SensitiveStrategy strategy;

    SensitiveType() {
        this.strategy = null;
    }

    SensitiveType(SensitiveStrategy strategy) {
        this.strategy = strategy;
    }

}